package com.fxd.controller;

import com.fxd.domain.user;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @auther fuxudong
 * @date 2021/2/3 - 10:57
 * 控制器方法返回值分类：
 *      字符串:
 *          controller 方法返回字符串可以指定逻辑视图名，通过视图解析器解析为物理视图地址。
 *      void:
 *          1 、使用 request  转向页面，如下：
 *      request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
 *          2 、也可以通过 response  页面重定向：
 *          注意：不能直接访问web-inf目录下的资源
 *      response.sendRedirect(request.getcontextpath()+"xxx/xxx.jsp")
 *          3 、也可以通过 response  指定响应结果，例如响应 json 数据：
 *      response.setCharacterEncoding("utf-8");
 *      response.setContentType("application/json;charset=utf-8");
 *      response.getWriter().write("json串");
 *
 */
@Controller
@RequestMapping("/user")
public class response {

    @RequestMapping("/string")
    public String string(Model model){
        user user = new user();
        user.setAge(4);
        user.setPassword("d");
        user.setUsername("a");
        model.addAttribute("user",user);
        return "success";
    }

    //如果不写返回值，则默认请求web-inf下pages，请求路径.jsp,/user/void.jsp
    @RequestMapping("/void")
    public void testvoid(HttpServletRequest request,HttpServletResponse response){

        user user = new user();
        user.setAge(4);
        user.setPassword("d");
        user.setUsername("av");
        request.setAttribute("user",user);
       try{
           //请求转发是一次请求，不用编写项目的名称，该方式视图解析器不起作用
           //request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response);
           response.sendRedirect(request.getContextPath()+"/index.jsp");
       }catch (Exception e){
           e.printStackTrace();
       }
    }

    /**
     * 关键字的方式进行转发或者重定向
     * 注意：视图解析器不起作用
     * @param model
     * @return
     */
    @RequestMapping("/forwardOrRedirect")
    public String forwardOrRedirect(Model model){
        user user = new user();
        user.setAge(4);
        user.setPassword("d");
        user.setUsername("ah");
        model.addAttribute("user",user);
        //请求转发
        //return "forward:/WEB-INF/pages/success.jsp";
        //重定向,可以不写项目名称
        return "redirect:/index.jsp";
    }

    @RequestMapping("/modelandview")
    public ModelAndView modelandview(ModelAndView mv){
        user user = new user();
        user.setAge(4);
        user.setPassword("d");
        user.setUsername("mv");
        mv.addObject("user",user);
        mv.setViewName("success");
        return mv;
    }

    @RequestMapping("/ajax")
    //@requestbody将json数据封装为javabean
    //@responsebody将javabean封装为json数据
    public @ResponseBody user ajax(@RequestBody user user){
        System.out.println(user);
        user.setUsername("ufo");
        return user;
    }


}
